package com.wsj.common.security;

class  EscapeUnescape{ 
	/**
	 * url ����
	 * @param src ��Ӧjavascript �е�escape()
	 * @return  
	 */
	public static String  escape (String src) 
	{ 
		int i;
		char j;  
		StringBuffer tmp = new StringBuffer();  
		tmp.ensureCapacity(src.length()*6);  
		for (i=0;i<src.length() ;i++ ){   
			j = src.charAt(i);  
			if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) 
				tmp.append(j);   
			else if (j<256)    
			{   
				tmp.append( "%" );    
			if (j<16) tmp.append( "0" ); 
				tmp.append( Integer.toString(j,16) ); 
				}   
			else   
				{    
				tmp.append( "%u" ); 
				tmp.append( Integer.toString(j,16) ); 
				}
			}
		return tmp.toString(); 
	} 
	/**
	 * url ����
	 * @param src  ��Ӧjavascript �е�unescape()
	 * @return
	 */
	public static String  unescape (String src) {
		StringBuffer tmp = new StringBuffer(); 
		tmp.ensureCapacity(src.length()); 
		int  lastPos=0,pos=0;  char ch; 
		while (lastPos<src.length())  {  
			pos = src.indexOf("%",lastPos); 
			if (pos == lastPos)    {   
				if (src.charAt(pos+1)=='u')     {    
					ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);  
					tmp.append(ch);  
					lastPos = pos+6; 
					}    
				else     
					{ 
							ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);
							tmp.append(ch);
							lastPos = pos+3;  
					}   
				}  
			else  
				{   
					if (pos == -1)  
					{   
						tmp.append(src.substring(lastPos)); 
						lastPos=src.length(); 
						}    
					else     
					{ 
							tmp.append(src.substring(lastPos,pos)); 
							lastPos=pos;   
					} 
				} 
			} 
		return tmp.toString();
		}
	
	public static void main(String[] args)  { 
//		String tmp="���"; 
//		System.out.println("testing escape : "+tmp);  
//		tmp =escape(tmp);
//		System.out.println(tmp); 
//		System.out.println("testing unescape :"+tmp); 
//		System.out.println(unescape("%u8868%u5355%u4E2D%u4E0D%u9700%u8981action%u3001method%u4E4B%u7C7B%u7684%u5C5E%u6027"));	
		}
	}


